home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / lib.exe / TEXTIO.LIB < prev   
Text File  |  1992-02-22  |  6KB  |  499 lines

  1. #IF !LIB4A86
  2. #ELSE
  3. #IF !INTERN_LIB4A86_S
  4. INTERN_LIB4A86_S EQU 01
  5. JMP START
  6. #ENDIF
  7. #ENDIF
  8. DATEITABELLE STRUC [BX]
  9. _HANDLE DW ?
  10. _GROESSE DW ?
  11. _ZEIGER DW ?
  12. _ENDE DW ?
  13. _OFFSET DW ?
  14. _SEGMENT DW ?
  15. _STATUS DB ?
  16. _NAME DB ?
  17. DB 041H DUP ?
  18. ENDS
  19. O000 EQU OFFSET _NAME
  20. GESCHLOSSEN EQU 0FFH
  21. LESEN EQU 000H
  22. SCHREIBEN EQU 001H
  23. EOF_KZ EQU 0FFH
  24. DISKVOLL EQU 0FFH
  25. FALSCHER_MODE EQU 0FEH
  26. CR EQU 0DH
  27. LF EQU 0AH
  28. CTRL_Z EQU 1AH
  29. S000 DW 0
  30. USECONTROLZ DW 0FFH
  31. WRITE_MODUS EQU 002H
  32. READ_MODUS EQU 000H
  33. FILEMODE DB 00H
  34. CREATEFILEATTR DW 0
  35. CREATEFILEBUFFERED:
  36. MOV AH,03CH
  37. JMP >L1
  38. CREATENEWFILEBUFFERED:
  39. MOV AH,05BH
  40. L1:
  41. PUSH DX,CX,SI
  42. CMP _STATUS,GESCHLOSSEN
  43. JE >L1
  44. MOV AH,FALSCHER_MODE
  45. STC
  46. JMP >L9
  47. L1:
  48. CLD
  49. PUSH AX
  50. CALL INTERN_KONVERTNAME1
  51. MOV CX,CS:CREATEFILEATTR
  52. AND CX, 027H
  53. POP AX
  54. INT 021H
  55. JC >L9
  56. MOV CL,SCHREIBEN
  57. CALL INTERN_FUELLETABELLE
  58. CLC
  59. L9:
  60. POP SI,CX,DX
  61. RET
  62. RESETFILEBUFFERED:
  63. MOV AL,READ_MODUS
  64. JMP >L1
  65. REWRITEFILEBUFFERED:
  66. MOV AL,WRITE_MODUS
  67. L1:
  68. MOV AH,CS:FILEMODE
  69. AND AH,11110000XB
  70. OR AL,AH
  71. PUSH SI,DX
  72. CMP _STATUS,GESCHLOSSEN
  73. JE >L1
  74. MOV AH,FALSCHER_MODE
  75. JMP >L8
  76. L1:
  77. CLD
  78. PUSH AX
  79. CALL INTERN_KONVERTNAME1
  80. MOV AH,03DH
  81. INT 021H
  82. POP DX
  83. JC >L8
  84. MOV CL,SCHREIBEN
  85. TEST DL,WRITE_MODUS
  86. JNZ >L1
  87. MOV CL,LESEN
  88. L1:
  89. CALL INTERN_FUELLETABELLE
  90. CLC
  91. JMP >L9
  92. L8:
  93. STC
  94. L9:
  95. POP DX,SI
  96. RET
  97. V0 DB 0
  98. APPENDFILEBUFFERED:
  99. PUSH BX,CX,DX
  100. CMP _STATUS,GESCHLOSSEN
  101. JE >L1
  102. MOV AH,FALSCHER_MODE
  103. JMP >L8
  104. L1:
  105. CALL REWRITEFILEBUFFERED
  106. JC >L8
  107. MOV BX,AX
  108. MOV AL,02
  109. XOR CX,CX
  110. XOR DX,DX
  111. MOV AH,042H
  112. INT 021H
  113. JC >L8
  114. OR AX,DX
  115. JZ >L90
  116. CMP CS:USECONTROLZ,0
  117. JE >L90
  118. MOV AL,2
  119. XOR DX,DX
  120. DEC DX
  121. MOV CX,DX
  122. MOV AH,042H
  123. INT 021H
  124. JC >L8
  125. PUSH DS
  126. MOV DS,CS
  127. MOV DX,OFFSET V0
  128. MOV AH,03FH
  129. MOV CX,01
  130. INT 021H
  131. POP DS
  132. JC >L8
  133. OR AX,AX
  134. JZ >L90
  135. CMP CS:V0,CTRL_Z
  136. JNE >L90
  137. XOR DX,DX
  138. NOT DX
  139. MOV CX,DX
  140. MOV AH,042H
  141. INT 021H
  142. JC >L8
  143. L90:
  144. MOV AX,BX
  145. CLC
  146. JMP >L9
  147. L8:
  148. STC
  149. L9:
  150. POP DX,CX,BX
  151. RET
  152. V3 DB 0
  153. READFILEBUFFERED:
  154. PUSH CX
  155. MOV CS:V3,1
  156. JMP >L1
  157. READLNFILEBUFFERED:
  158. PUSH CX
  159. MOV CX,0FFH
  160. MOV CS:V3,CH
  161. L1:
  162. PUSH BP,DX,DS,ES,SI
  163. CMP _STATUS,LESEN
  164. JE >L1
  165. MOV AH,FALSCHER_MODE
  166. JMP >L80
  167. L1:
  168. CLD
  169. PUSH DI
  170. XOR AL,AL
  171. STOSB
  172. XOR CH,CH
  173. MOV SI,_OFFSET
  174. MOV BP,_ZEIGER
  175. ADD SI,BP
  176. MOV DX,_ENDE
  177. MOV CS:S000,DS
  178. MOV DS,_SEGMENT
  179. L0:
  180. CMP BP,DX
  181. JB >L1
  182. PUSH BX,CX,DX
  183. PUSH DS
  184. MOV DS,CS:S000
  185. MOV AH,03FH
  186. MOV CX,_GROESSE
  187. MOV DX,_OFFSET
  188. MOV BX,_HANDLE
  189. POP DS
  190. INT 021H
  191. POP DX,CX,BX
  192. IF C JMP >L8
  193. PUSH DS
  194. MOV DS,CS:S000
  195. MOV _ENDE,AX
  196. MOV DX,AX
  197. MOV BP,_GROESSE
  198. INC BP
  199. OR AX,AX
  200. JE >L7
  201. XOR BP,BP
  202. MOV _ZEIGER,BP
  203. MOV SI,_OFFSET
  204. POP DS
  205. JMP >L1
  206. L80: JMP >L80
  207. L1:
  208. LODSB
  209. INC BP
  210. CMP CS:V3,0
  211. JNE >L2
  212. CMP AL,CR
  213. JNE >L1
  214. CMP B[SI],LF
  215. JNE >L9
  216. INC BP
  217. INC SI
  218. JMP >L9
  219. L1:
  220. CMP AL,LF
  221. JNE >L2
  222. CMP B[SI],CR
  223. JNE >L9
  224. INC BP
  225. INC SI
  226. JMP >L9
  227. L2:
  228. CMP CS:USECONTROLZ,0
  229. JE >L1
  230. CMP AL,CTRL_Z
  231. JE >L71
  232. L1:
  233. STOSB
  234. LOOP L0
  235. JMP >L9
  236. L7:
  237. POP DS
  238. L71:
  239. MOV AH,EOF_KZ
  240. JMP >L8
  241. L9:
  242. XOR AH,AH
  243. MOV AL,0FFH
  244. POP DI
  245. CALL INTERN_KORRIGIERETABELLE
  246. CLC
  247. JMP >L9
  248. L8:
  249. POP DI
  250. MOV AL,0FFH
  251. CALL INTERN_KORRIGIERETABELLE
  252. L80:
  253. STC
  254. L9:
  255. POP SI,ES,DS,DX,BP
  256. POP CX
  257. RET
  258. C1 DB 0
  259. C2 DB CR,LF,0H
  260. WRITEFILEBUFFERED:
  261. XOR AX,AX
  262. MOV CS:C1,AL
  263. JMP >L1
  264. WRITELNFILEBUFFERED:
  265. MOV AL,1
  266. MOV CS:C1,AL
  267. L1:
  268. PUSH BP,CX,DX,SI,DI,ES
  269. CMP _STATUS,SCHREIBEN
  270. JE >L1
  271. MOV AH,FALSCHER_MODE
  272. JMP >L8
  273. L1:
  274. CLD
  275. MOV ES,_SEGMENT
  276. MOV DI,_OFFSET
  277. MOV BP,_ZEIGER
  278. MOV DX,_GROESSE
  279. CMP BP,DX
  280. IF A XOR BP,BP
  281. ADD DI,BP
  282. XOR CX,CX
  283. MOV CL,[SI]
  284. OR CL,CL
  285. JE >L2
  286. INC SI
  287. L0:
  288. CMP BP,DX
  289. JB >L1
  290. MOV _ZEIGER,BP
  291. CALL FLUSHFILEBUFFER
  292. JC >L8
  293. MOV DI,_OFFSET
  294. MOV BP,_ZEIGER
  295. L1:
  296. MOVSB
  297. INC BP
  298. LOOP L0
  299. L2:
  300. MOV AL,CS:C1
  301. OR AL,AL
  302. JE >L7
  303. MOV CX,2
  304. MOV SI,OFFSET C2
  305. L0:
  306. CMP BP,DX
  307. JB >L1
  308. MOV _ZEIGER,BP
  309. CALL FLUSHFILEBUFFER
  310. JC >L8
  311. MOV DI,_OFFSET
  312. MOV BP,_ZEIGER
  313. L1:
  314. MOV AL,CS:[SI]
  315. INC SI
  316. STOSB
  317. INC BP
  318. LOOP L0
  319. L7:
  320. MOV _ZEIGER,BP
  321. XOR AH,AH
  322. L9:
  323. CLC
  324. JMP >L1
  325. L8:
  326. STC
  327. L1:
  328. POP ES,DI,SI,DX,CX,BP
  329. RET
  330. FLUSHFILEBUFFER:
  331. PUSH DX,CX,DS,ES
  332. CMP _STATUS,SCHREIBEN
  333. JE >L1
  334. MOV AH,FALSCHER_MODE
  335. JMP >L8
  336. L1:
  337. CLD
  338. MOV CX,_ZEIGER
  339. OR CX,CX
  340. JE >L9
  341. CMP CX,_GROESSE
  342. JA >L9
  343. MOV DX,_OFFSET
  344. MOV ES,_SEGMENT
  345. PUSH BX
  346. MOV BX,_HANDLE
  347. PUSH DS
  348. MOV DS,ES
  349. MOV AH,040H
  350. INT 021H
  351. POP DS
  352. JC >L1
  353. PUSH BX,CX
  354. MOV AH,030H
  355. INT 021H
  356. XCHG AH,AL
  357. CMP AX,031EH
  358. POP CX,BX
  359. CMC
  360. JNC >L1
  361. MOV AH,068H
  362. INT 021H
  363. L1:
  364. IF NC MOV AX,CX
  365. POP BX
  366. JC >L8
  367. OR AX,AX
  368. JE >L6
  369. XOR AX,AX
  370. MOV _ZEIGER,AX
  371. MOV _ENDE,AX
  372. JMP >L9
  373. L6:
  374. MOV AH,EOF_KZ
  375. L8:
  376. STC
  377. JMP >L1
  378. L9:
  379. CLC
  380. L1:
  381. POP ES,DS,CX,DX
  382. RET
  383. V1 DB 1, CTRL_Z
  384. V2 DW 0
  385. CLOSEFILEBUFFERED:
  386. CMP _STATUS,GESCHLOSSEN
  387. JNE >L1
  388. MOV AH,FALSCHER_MODE
  389. STC
  390. RET
  391. L1:
  392. CMP _STATUS,LESEN
  393. JNE >L1
  394. PUSH CX
  395. CALL INTERN_CLOSEFILEBUFFERED
  396. POP CX
  397. RET
  398. L1:
  399. PUSH CX
  400. MOV CS:V0,0
  401. CMP CS:USECONTROLZ,0
  402. JE >L1
  403. PUSH DS,SI
  404. MOV DS,CS
  405. MOV SI,OFFSET V1
  406. CALL WRITEFILEBUFFERED
  407. POP SI,DS
  408. JNC >L1
  409. MOV CS:V2,AX
  410. L1:
  411. CALL FLUSHFILEBUFFER
  412. JNC >L1
  413. CMP CS:V2,0
  414. IF E MOV CS:V2,AX
  415. L1:
  416. CALL INTERN_CLOSEFILEBUFFERED
  417. JC >L9
  418. MOV AX,CS:V2
  419. OR AX,AX
  420. IF NZ STC
  421. L9:
  422. POP CX
  423. RET
  424. INTERN_KONVERTNAME1:
  425. CMP _GROESSE,0FFF0H
  426. IF A MOV _GROESSE,0FFF0H
  427. INTERN_KONVERTNAME:
  428. PUSH SI,AX
  429. MOV SI,BX
  430. ADD SI,O000
  431. XOR AX,AX
  432. LODSB
  433. MOV DX,SI
  434. ADD SI,AX
  435. MOV [SI],AH
  436. POP AX,SI
  437. RET
  438. INTERN_FUELLETABELLE:
  439. PUSH AX
  440. MOV _HANDLE,AX
  441. MOV AX,_GROESSE
  442. MOV _ENDE,AX
  443. INC AX
  444. MOV _ZEIGER,AX
  445. MOV _STATUS,CL
  446. POP AX
  447. RET
  448. INTERN_KORRIGIERETABELLE:
  449. MOV DS,CS:S000
  450. MOV _ZEIGER,BP
  451. SUB AL,CL
  452. STOSB
  453. DEC DI
  454. RET
  455. INTERN_CLOSEFILEBUFFERED:
  456. PUSH BX
  457. MOV BX,_HANDLE
  458. MOV AH,03EH
  459. INT 021H
  460. POP BX
  461. PUSH AX
  462. PUSHF
  463. MOV CL,0FFH
  464. XOR AX,AX
  465. CALL INTERN_FUELLETABELLE
  466. POPF
  467. POP AX
  468. RET
  469. #IF !INTERN_CMARK0
  470. INTERN_CMARK0 EQU 01H
  471. INTERN_CMARK1:
  472. PUSH BP
  473. MOV BP,SP
  474. MOV BX,06H
  475. SUB CH,[BP+SI]
  476. SUB AH,[BX+SI]
  477. DEC SP
  478. DEC CX
  479. INC DX
  480. XOR AL,041H
  481. CMP B[02820H],DH
  482. INC BX
  483. SUB W[BX+SI],SP
  484. INC DX
  485. CS AND B[BP+DI+043H],DL
  486. DEC AX
  487. INC BP
  488. DEC BP
  489. DEC BP
  490. INC BP
  491. PUSH DX
  492. AND B[BP+SI],CH
  493. SUB CH,[BP+SI]
  494. POP DX
  495. MOV SP,BP
  496. POP BP
  497. RET
  498. #ENDIF
  499.